Пример использования валидирующих EAI и IDN библиотек в коде Java

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску

Пример проекта для бэкенда на Java

Пример доступен здесь.

Примеры кода на Java для универсального принятия

В этой папке вы найдете примеры кода для исполнения правил универсального принятия (UA) для библиотек Java.

Подготовьте среду

Убедитесь, что у вас установлена Java версии 11 и выше.

Бэкенд на Java для демо-сайта, соответствующего требованиям UA

Установка

Бэкенд на Java использует фреймворк SparJava. Исходный код написан в Gradle.

В директории ua-sample-code-web запустите:

$ ./gradlew build install

Исполняемый файл и библиотеки бэкенда будут находиться в build/install/ua-sample-code-web, запустить их можно с:

$ ./build/install/ua-sample-code-web/bin/ua-sample-code-web

Создание Docker-образа

Чтобы создать докерный образ для бэкенда, запустите:

$ docker build . -t ua-backend-java

Чтобы запустить бэкенд и проверить порт 1234 на доступность, введите:

$ docker run -d --name ua-java -p 1234:4567 ua-backend-java

Инструменты командной строки

Чтобы создать инструменты командной строки, в директории ua-sample-code-bin запустите:

$ ./gradlew build install

Для каждого инструмента исполняемый файл и библиотеки будут находиться в <tool-name>/build/install/<tool-name> и запускаться через:

$ <tool-name>/build/install/<tool-name>/bin/<tool-name> <OPTIONS>

Примеры кода для IDNA (интернационализированные доменные имена в приложениях)

guava

Библиотека Guava сверяет доменное имя с перечнем проекта «Public Suffix List». Для валидации в целях Универсального принятия требуется другая библиотека. Данный пример использует ICU4j, которая является наиболее надежным способом проверить соответствие домена протоколу IDNA 2008.

Поэтому мы не предоставили инструмент командной строки для Guava.

commons-validator

Commons-validator использует статический список доменов верхнего уровня, который содержится в исходном коде, поэтому в зависимости от версии библиотеки список доменов может быть сильно устаревшим. В любом случае, поскольку список доменов верхнего уровня постоянно обновляется, любой статический список быстро устаревает.

Чтобы этого избежать, в этом примере список доменов верхнего уровня загружается с сайта ICANN и затем обновляется статический список в библиотеке. Чтобы этого избежать, в этом примере список доменов верхнего уровня загружается с сайта ICANN и затем обновляется статический список в библиотеке. При использовании примера в фоновом режиме, поскольку список не может быть обновлен после начала работы валидатора, список останется устаревшим до следующего запуска фонового режима.

Чтобы запустить commons-validator для IDNA, вы можете:

$ ./common-validator-idn-sample/build/install/common-validator-idn-sample/bin/common-validator-idn-sample --domain <domain>

icu

icu может использоваться для конвертирования меток U-Label в A-Label и наоборот.

Код icu получает U-Label как входящий параметр и возвращает либо A-Label, либо ошибку, если домен недействителен.

Для запуска примера icu используйте:

$ ./icu4j-sample/build/install/icu4j-sample/bin/icu4j-sample --domain <domain>

Примеры с EAI (Интернационализация адреса электронной почты)

Примеры SMTP-протокола наиболее просты и не включают никакие проверки аутентификации. Вы можете использовать SMTP-сервер Mailhog для тестов; основная версия не поддерживает расширение SMTPUTF8, но существует форк с такой поддержкой.

commons-validator

В случае валидации адреса электронной почты сохраняется проблема с доменной частью адреса, описанная выше.

Чтобы запустить пример commons-validator для EAI, вы можете:

$ ./common-validator-eai-sample/build/install/common-validator-eai-sample/bin/common-validator-eai-sample --email <email-address>

jakarta-mail

Пример с jakarta-mail отправляет электронное письмо на электронный адрес как входящий параметр с соответствующими отметками поддержки EAI.

jakarta-mail валидирует адрес электронной почты и поддерживает EAI, но доменное имя должно быть нормализовано, и некоторые корректные домены могут не пройти проверку. Поэтому пример кода сначала нормализует доменное имя и, если оно все еще не проходит проверку, преобразует его в A-Label c помощью библиотеки ICU, чтобы оно могло пройти проверку. Если конвертация ICU не удалась, адрес почты считается некорректным.

В случае, если сервер SMTP не поддерживает опцию SMTPUTF8, пример упрощения показан с помощью преобразования доменной части в ASCII с помощью библиотеки ICU. jakarta-mail не возвращает ошибку, если сервер не поддерживает опции SMTPUTF8, поэтому за проверку отвечает пример кода.

Чтобы запустить пример кода для jakarta-mail, введите:

$ ./jakarta-mail-sample/build/install/jakarta-mail-sample/bin/jakarta-mail-sample --to="<email-address>" --host=<smtp-sever> --port=<port>